/*

       本样例运行环境合宙esp32c3开发板+arduino1.8.19+esp32 V2.04或V2.03。
   开发板上任意GPIO脚均可以作为舵机驱动PWM信号输出(GPIO13需要先刷脚本解锁才能
   输出)。本样例默认的是180度舵机的角度变化，90度舵机同理。而360度舵机的脉冲时
   间表示的并不是角度，而是正反转和转速。
   
       理论上有多少GPIO就能驱动多少个舵机，但是为了避免USB供电负荷过大，并且开
   发板只提供2个+5V针脚，所以本样例只演示两个舵机的运行。在接超过两个舵机或者使
   用大功率舵机时建议使用外接电源给舵机供电，避免供电不足。
   
      本样例正常运行后应该是接GPIO2的舵机从0度转至180度，停1秒后从180度转至
   0度。停1秒后，接GPIO3的舵机从0度转至180度，停1秒后从180度转至0度，再停1秒
   反复循环。

   
      舵机接线方式：
                （负极（黑线或棕线）->开发板GND或者外接电源负极）
                （正极（红线）->开发板+5V或者外接电源正极） 
                （信号（黄线）->开发板相应GPIO脚）


                                                方布块
                                             2022年9月8日
*/


#include <Servo_LuatEsp32c3.h>                //引用库文件

#define pin1        2       //定义控制舵机1的GPIO PIN脚
#define pin2        3       //定义控制舵机2的GPIO PIN脚     接几个舵机就定义几个PIN，名字随意
#define servo1_max_degree        180        //定义舵机1最大转动角度（90、180）
#define servo2_max_degree        180        //定义舵机2最大转动角度，如果都是一样的舵机可以共用一个就行，此处为便于示范

Servo servo1;       //实例化舵机1
Servo servo2;       //实例化舵机2   接几个舵机就实例化几个，实例化的名字随意，不重复就行

void setup() {
  // put your setup code here, to run once:
  
  servo1.Servo_Setup(pin1,servo1_max_degree);           //在setup函数中初始化舵机1，参数为pin脚和该舵机最大转动度数
  servo2.Servo_Setup(pin2,servo2_max_degree);           //同上，初始化舵机2
}

void loop() {
  // put your main code here, to run repeatedly:
  int16_t degree;                                      //定义degree度数变量
  for(degree=0;degree<=servo1_max_degree;degree++){    //从0度转到舵机1的最大旋转度数
    servo1.Servo_Rotation(degree);                     //将当前degree度数的值传输给舵机1
    delay(20);                                         //延时20毫秒让舵机运行平滑，避免程序循环跑得过快舵机反应不过来打齿
  }
  delay(1000);                                        //暂停1秒
  for(degree=servo1_max_degree;degree>=0;degree--){   //从舵机1的最大旋转度数转回至0度
    servo1.Servo_Rotation(degree);                    //将当前degree度数的值传输给舵机1
    delay(20);                                        //延时20毫秒可以调整舵机转动速度，并避免程序循环跑得过快舵机反应不过来打齿
  }
  delay(1000);                                        //暂停1秒
  for(degree=0;degree<=servo2_max_degree;degree++){   //从这行开始是舵机2的控制语句，运行结果同舵机1
    servo2.Servo_Rotation(degree);
    delay(20);
  }
  delay(1000);
  for(degree=servo2_max_degree;degree>=0;degree--){
    servo2.Servo_Rotation(degree);
    delay(20);
  }
  delay(1000);  
}